#ifndef DATABASEMANAGER_H
#define DATABASEMANAGER_H

#include <QObject>
#include <QSqlDatabase>
#include <QString>
#include <QJsonObject>
#include <memory>

class DatabaseManager : public QObject {
    Q_OBJECT
    
public:
    static DatabaseManager& instance();
    
    // 初始化数据库
    bool initialize(const QString &dbPath = "");
    
    // 关闭数据库
    void close();
    
    // 保存混淆记录
    bool saveObfuscationRecord(const QJsonObject &record);
    
    // 获取混淆历史
    QJsonArray getObfuscationHistory(int limit = 100);
    
    // 根据版本ID获取记录
    QJsonObject getRecordByVersion(const QString &versionId);
    
    // 删除记录
    bool deleteRecord(const QString &versionId);

    // 清空所有历史记录（包含映射关系）
    bool clearObfuscationHistory();
    
    // 保存映射关系
    bool saveMappings(const QString &versionId, const QJsonObject &mappings);
    
    // 获取映射关系
    QJsonObject getMappings(const QString &versionId);
    
    // 清理旧记录
    bool cleanOldRecords(int daysToKeep = 30);
    
signals:
    void databaseError(const QString &error);
    
private:
    DatabaseManager();
    ~DatabaseManager();
    DatabaseManager(const DatabaseManager&) = delete;
    DatabaseManager& operator=(const DatabaseManager&) = delete;
    
    bool createTables();
    bool checkDatabase();
    
    QSqlDatabase m_database;
    QString m_dbPath;
};

#endif // DATABASEMANAGER_H